package com.example.link.model.stats;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Random;

/**
 * @author qwert
 * @version 1.0.0
 * @create 2025/8/30 10:01
 **/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class LinkStatsVO {
    private TotalStats totalStats;
    private List<Long> hourStats;
    private List<DailyStats> dailyStats;
    private List<ChinaStats> chinaStats;
    private List<BrowserStats> browserStats;
    private List<OsStats> osStats;
    private List<DeviceStats> deviceStats;
    private List<NetworkStats> networkStats;


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class TotalStats {
        private Long pv;
        private Long uv;
        private Long uip;
    }


    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DailyStats {
        private Long pv;
        private Long uv;
        private Long uip;
        private String date;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ChinaStats {
        private String region;
        private Long count;
        private Double ratio;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class BrowserStats {
        private String browser;
        private Long count;
        private Double ratio;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class OsStats {
        private String os;
        private Long count;
        private Double ratio;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DeviceStats {
        private String device;
        private Long count;
        private Double ratio;
    }

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class NetworkStats {
        private String network;
        private Long count;
        private Double ratio;
    }


    public static List<ChinaStats> countChinaStats() {
        Random random = new Random();
        return Arrays.asList(
                ChinaStats.builder().region("北京市").count(50L).ratio(0.05).build(),
                ChinaStats.builder().region("上海市").count(45L).ratio(0.045).build(),
                ChinaStats.builder().region("广东省").count(40L).ratio(0.04).build(),
                ChinaStats.builder().region("江苏省").count(38L).ratio(0.038).build(),
                ChinaStats.builder().region("浙江省").count(35L).ratio(0.035).build(),
                ChinaStats.builder().region("山东省").count(30L).ratio(0.03).build(),

                // 85% 的城市数据，随机生成 count 值
                ChinaStats.builder().region("安徽省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("天津市").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("重庆市").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("四川省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("河北省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("湖南省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("湖北省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("辽宁省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("陕西省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("江西省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("福建省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("河南省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("黑龙江省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("山西省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("贵州省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("甘肃省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("云南省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("新疆自治区").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("内蒙古自治区").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("广西自治区").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("宁夏自治区").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("海南省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("青海省").count(random.nextLong(51)).ratio(0.01).build(),
                ChinaStats.builder().region("西藏自治区").count(random.nextLong(51)).ratio(0.01).build()
        );
    }


    public static LinkStatsVO createLinkStatsVO() {
        // 创建TotalStats对象
        LinkStatsVO.TotalStats totalStats = LinkStatsVO.TotalStats.builder()
                .pv(3L)
                .uv(3L)
                .uip(2L)
                .build();

        // 创建DailyStats列表
        List<LinkStatsVO.DailyStats> dailyStats = Arrays.asList(
                LinkStatsVO.DailyStats.builder().pv(1L).uv(1L).uip(1L).date("2025-08-16").build(),
                LinkStatsVO.DailyStats.builder().pv(0L).uv(0L).uip(0L).date("2025-08-17").build(),
                LinkStatsVO.DailyStats.builder().pv(0L).uv(0L).uip(0L).date("2025-08-18").build(),
                LinkStatsVO.DailyStats.builder().pv(2L).uv(2L).uip(1L).date("2025-08-19").build(),
                LinkStatsVO.DailyStats.builder().pv(0L).uv(0L).uip(0L).date("2025-08-20").build(),
                LinkStatsVO.DailyStats.builder().pv(0L).uv(0L).uip(0L).date("2025-08-21").build(),
                LinkStatsVO.DailyStats.builder().pv(0L).uv(0L).uip(0L).date("2025-08-22").build()
        );

        // 创建ChinaStats列表
        List<LinkStatsVO.ChinaStats> chinaStats = Collections.singletonList(
                ChinaStats.builder().region("安徽省").count(3L).ratio(1.0).build()
        );

        // 创建BrowserStats列表
        List<LinkStatsVO.BrowserStats> browserStats = Arrays.asList(
                LinkStatsVO.BrowserStats.builder().browser("edge").count(2L).ratio(0.6666666666666666).build(),
                LinkStatsVO.BrowserStats.builder().browser("chrome").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.BrowserStats.builder().browser("firefox").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.BrowserStats.builder().browser("safari").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.BrowserStats.builder().browser("opera").count(1L).ratio(0.3333333333333333).build()
        );

        // 创建OsStats列表（注意：JSON中是"os"，但类中是"browser"字段，这里需要调整类定义）
        List<LinkStatsVO.OsStats> osStats = Arrays.asList(
                LinkStatsVO.OsStats.builder().os("android").count(2L).ratio(0.6666666666666666).build(),
                LinkStatsVO.OsStats.builder().os("windows").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.OsStats.builder().os("ios").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.OsStats.builder().os("macos").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.OsStats.builder().os("linux").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.OsStats.builder().os("harmony").count(1L).ratio(0.3333333333333333).build()
        );

        // 创建DeviceStats列表
        List<LinkStatsVO.DeviceStats> deviceStats = Arrays.asList(
                LinkStatsVO.DeviceStats.builder().device("mobile").count(2L).ratio(0.6666666666666666).build(),
                LinkStatsVO.DeviceStats.builder().device("pc").count(1L).ratio(0.3333333333333333).build(),
                LinkStatsVO.DeviceStats.builder().device("pad").count(1L).ratio(0.3333333333333333).build()
        );

        // 创建NetworkStats列表
        List<LinkStatsVO.NetworkStats> networkStats = Arrays.asList(
                NetworkStats.builder().network("broadband").count(3L).ratio(0.5).build(),
                NetworkStats.builder().network("mobile").count(3L).ratio(0.5).build()
        );

        // 构建并返回LinkStatsVO对象
        return LinkStatsVO.builder()
                .totalStats(totalStats)
                .dailyStats(dailyStats)
                .chinaStats(chinaStats)
                .browserStats(browserStats)
                .osStats(osStats)
                .deviceStats(deviceStats)
                .networkStats(networkStats)
                .build();
    }
}
